<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Annotation (Programmierung)</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Annotation_(Programmierung)"> <link href="./_mw_/ext.cite.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.pygments.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Annotation_Programmierung rootpage-Annotation_Programmierung skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Annotation (Programmierung)</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p><b>Annotationen</b> (vom Lateinischen für „Anmerkung“) sind ein Mittel zur Strukturierung von <a href="Quelltext" title="Quelltext">Programmquelltexten</a>, bei der die Erzeugung von Programmtexten und mit der Programmierung verbundener Hilfsdateien teilweise automatisiert wird. Als Informationsgrundlage für die automatische Erzeugung der zusätzlichen Dateien werden Informationen aus dem Quelltext herangezogen, die man <a href="Metadaten" title="Metadaten">Metadaten</a> oder Metainformationen, Anmerkungen und Kommentare oder Attribute nennt. Bei der Übersetzung vom <a href="Compiler" title="Compiler">Compiler</a> werden die Informationen nicht beachtet.
</p><p>Programmiersprachen, die diese Form der Einbindung von Metainformationen ermöglichen, sind unter anderem <a href="Java_(Programmiersprache)" title="Java (Programmiersprache)">Java</a>, <a href="C-Sharp" title="C-Sharp">C#</a> und <a href="VB.NET" class="mw-redirect" title="VB.NET">VB.NET</a>. Mit Hilfe von Zusatzwerkzeugen lassen sich Metainformationen auch in Sprachen einbetten, wenn deren Syntax diese nicht explizit unterstützt. Die Metadaten werden dann üblicherweise in Kommentaren vor dem Compiler verborgen und mit den Zusatzwerkzeugen ausgewertet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Attribute_in_C#_und_VB.NET"><span id="Attribute_in_C.23_und_VB.NET"></span>Attribute in C# und VB.NET</h2></div>
<p>In C# und VB.NET werden Metadaten in Form von Attributen abgebildet. Attribute können für Assemblys, Klassen, Strukturen, Methoden, Parameter, Felder und Enumerationen angegeben werden. Jedes einzelne Attribut wird in eckigen (C#) beziehungsweise spitzen Klammern (VB.NET) vor dem jeweiligen Sprachelement angegeben. Attribut-Parameter werden in gleicher Weise verwendet wie Parameter von Methoden und Eigenschaften.<sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup>
</p><p>Das folgende Beispiel zeigt, wie die Attribute <code>Obsolete</code> zum Markieren von veralteten Code sowie <code>DllImport</code> zum Einbinden von <i>unmanaged</i> (nativen) Assemblys via COM-Interop verwendet werden.
</p>
<div class="mw-highlight mw-highlight-lang-csharp mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// Eine Methode (hier Foo) als veraltet markieren.</span>
<span class="c1">// Der Parameter vom Typ System.String wird u. a. von IDEs als Hinweistext verwendet.</span>
<span class="na">[Obsolete("Verwenden sie die Methode Bar.")]</span>
<span class="k">public</span><span class="w"> </span><span class="k">void</span><span class="w"> </span><span class="nf">Foo</span><span class="p">(</span><span class="kt">string</span><span class="w"> </span><span class="n">stringParam</span><span class="p">)</span>
<span class="p">{</span>
<span class="w"> </span><span class="c1">//...</span>
<span class="p">}</span>
<span class="c1">// Import der Win32 MessageBox.</span>
<span class="c1">// Der Konstruktor von DllImport nimmt hier ein Argument entgegen ("user32.dll"),</span>
<span class="c1">// die Klasse DllImport verfügt über eine Eigenschaft CharSet, der ein Wert zugewiesen wird.</span>
<span class="na">[DllImport("user32.dll", CharSet = CharSet.Unicode)]</span>
<span class="k">public</span><span class="w"> </span><span class="k">static</span><span class="w"> </span><span class="k">extern</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="nf">MessageBox</span><span class="p">(</span><span class="n">IntPtr</span><span class="w"> </span><span class="n">hWnd</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">text</span><span class="p">,</span><span class="w"> </span><span class="n">String</span><span class="w"> </span><span class="n">caption</span><span class="p">,</span><span class="w"> </span><span class="kt">uint</span><span class="w"> </span><span class="n">type</span><span class="p">);</span>
</pre></div>
<p>Neben den Standard-Attributen, die das .NET-Framework bereitstellt, ist auch das Definieren eigener Attribute möglich. Hierzu muss eine eigene Klasse erstellt werden, die von <code>System.Attribute</code> ableitet.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup>
</p><p>Das folgende Beispiel zeigt die Definition eines einfachen Attributs <code>Autor</code>:
</p>
<div class="mw-highlight mw-highlight-lang-csharp mw-content-ltr" dir="ltr"><pre><span></span><span class="c1">// Definieren des Attributs "Autor"</span>
<span class="na">[System.AttributeUsage(System.AttributeTargets.Class |</span>
<span class="na"> System.AttributeTargets.Struct)</span>
<span class="na">]</span>
<span class="k">public</span><span class="w"> </span><span class="k">class</span><span class="w"> </span><span class="nc">Autor</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="n">System</span><span class="p">.</span><span class="n">Attribute</span>
<span class="p">{</span>
<span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="n">_vorname</span><span class="p">;</span>
<span class="w"> </span><span class="k">private</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="n">_nachname</span><span class="p">;</span>
<span class="w"> </span><span class="k">public</span><span class="w"> </span><span class="nf">Autor</span><span class="p">(</span><span class="kt">string</span><span class="w"> </span><span class="n">vorname</span><span class="p">,</span><span class="w"> </span><span class="kt">string</span><span class="w"> </span><span class="n">nachname</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">_vorname</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">vorname</span><span class="p">;</span>
<span class="w"> </span><span class="n">_nachname</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">nachname</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="p">}</span>
<span class="c1">// Verwenden des Attributs "Autor"</span>
<span class="na">[Autor("Max", "Mustermann")]</span>
<span class="k">class</span><span class="w"> </span><span class="nc">BeispielKlasse</span>
<span class="p">{</span>
<span class="w"> </span><span class="c1">//...</span>
<span class="p">}</span>
</pre></div>
<div class="mw-heading mw-heading2"><h2 id="Annotationen_in_Java">Annotationen in Java</h2></div>
<p>Die Programmiersprache Java stellt mit <a href="Javadoc" title="Javadoc">Javadoc</a> und den Annotationen zwei Mechanismen zum Einbinden von Metadaten zur Verfügung. Diese werden insbesondere im <a href="Jakarta_EE" title="Jakarta EE">Jakarta-EE</a>-Umfeld eingesetzt, um verschiedene Dateien automatisiert zu erzeugen. Dazu zählen beispielsweise SQL-Dateien, Deployment-Deskriptoren und die mit <a href="Enterprise_Java_Beans" class="mw-redirect" title="Enterprise Java Beans">Enterprise Java Beans</a> verbundenen Schnittstellen (Remote Interface, Home Interface …).
</p>
<div class="mw-heading mw-heading3"><h3 id="Javadoc">Javadoc</h3></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→ </span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Javadoc" title="Javadoc">Javadoc</a></i></div>
<p>Javadoc ist ein Werkzeug zur Auswertung von Kommentaren im Quelltext, das mit Java 1.2 eingeführt wurde. Dazu werden Kommentare, die ausgewertet werden sollen mit der Zeichenkette <code>/**</code> eingeleitet. Innerhalb dieser Kommentare können dann spezielle Tags verwendet und diesen jeweils eine Zeichenkette als Wert zugewiesen werden.
</p><p>Die Auswertung erfolgt mittels des gleichnamigen Werkzeugs Javadoc, das ursprünglich zur automatisierten Quelltext-Dokumentation entworfen wurde. Eine weitere Möglichkeit stellt das insbesondere im <a href="Jakarta_EE" title="Jakarta EE">Jakarta-EE</a>-Umfeld eingesetzte <a href="XDoclet" title="XDoclet">XDoclet</a> dar. Das folgende Beispiel zeigt, wie man die Softwareversion mittels Javadoc angibt:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="cm">/**</span>
<span class="cm"> * @version 1.5</span>
<span class="cm"> */</span>
<span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">A</span><span class="w"> </span><span class="p">{}</span>
</pre></div>
<div class="mw-heading mw-heading3"><h3 id="Annotationen_(ab_Java_5)"><span id="Annotationen_.28ab_Java_5.29"></span>Annotationen (ab Java 5)</h3></div>
<div class="hauptartikel" role="navigation"><span class="hauptartikel-pfeil" title="siehe" aria-hidden="true" role="presentation">→ </span><i><span class="hauptartikel-text">Hauptartikel</span>: <a href="Annotation_(Java)" title="Annotation (Java)">Annotation (Java)</a></i></div>
<p>Mit der Sprachversion Java 5 wurden Annotationen als ein eigenes Sprachelement geschaffen. Annotationen werden im Quelltext durch ein @-Zeichen gefolgt vom Namen der Annotation gekennzeichnet. Zusätzlich ist es auch möglich, Annotationen Parameter zu übergeben. Außerdem können den vorgegebenen Annotationen auch eigene hinzugefügt werden.
</p><p>Annotationen können mittels des <a href="Annotation_(Java)" title="Annotation (Java)">Annotation Processing Toolkits (APT)</a> direkt im Quelltext oder mittels <a href="Reflexion_(Programmierung)" title="Reflexion (Programmierung)">Reflexion</a> zur Laufzeit eines Programms ausgewertet werden. Unter anderem dadurch entstehen weitere Einsatzmöglichkeiten im Vergleich zu Javadoc. So wertet beispielsweise der Compiler selbst einige Annotationen aus. Das folgende Beispiel zeigt, wie man eine Compiler-Warnung mittels der entsprechenden Annotation unterdrückt:
</p>
<div class="mw-highlight mw-highlight-lang-java mw-content-ltr" dir="ltr"><pre><span></span><span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kd">class</span> <span class="nc">A</span><span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="nd">@SuppressWarnings</span><span class="p">(</span><span class="s">"unchecked"</span><span class="p">)</span>
<span class="w"> </span><span class="kd">public</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="nf">meineMethode</span><span class="p">()</span><span class="w"> </span><span class="p">{}</span>
<span class="p">}</span>
</pre></div>
<p>Ab Java 6 ist das APT-Werkzeug bereits im Java-Compiler integriert und Teil des Standardkompilierungsprozesses. Ab Java 8 wird das APT-Werkzeug nicht mehr separat ausgeliefert, da die Annotation-Verarbeitung vollständig von der integrierten Compiler-API übernommen wird.
</p>
<div class="mw-heading mw-heading2"><h2 id="Einzelnachweise">Einzelnachweise</h2></div>
<ol class="references">
<li id="cite_note-1"><span class="mw-cite-backlink"><a href="#cite_ref-1">↑</a></span> <span class="reference-text"><span class="cite">Microsoft Developer Network: <a rel="nofollow" class="external text" href="https://msdn.microsoft.com/de-de/library/z0w1kczw(v=VS.100).aspx"><i>Attribute (C# und Visual Basic).</i></a><span class="Abrufdatum"> Abgerufen am 29. November 2011</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AAnnotation+%28Programmierung%29&rft.title=Attribute+%28C%23+und+Visual+Basic%29&rft.description=Attribute+%28C%23+und+Visual+Basic%29&rft.identifier=https%3A%2F%2Fmsdn.microsoft.com%2Fde-de%2Flibrary%2Fz0w1kczw%28v%3DVS.100%29.aspx&rft.creator=Microsoft+Developer+Network"> </span></span>
</li>
<li id="cite_note-2"><span class="mw-cite-backlink"><a href="#cite_ref-2">↑</a></span> <span class="reference-text"><span class="cite">MSDN: <a rel="nofollow" class="external text" href="https://msdn.microsoft.com/de-de/library/sw480ze8.aspx"><i>Erstellen benutzerdefinierter Attribute (C# und Visual Basic).</i></a><span class="Abrufdatum"> Abgerufen am 29. November 2011</span>.</span><span style="display: none;" class="Z3988" title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&rfr_id=info%3Asid%2Fde.wikipedia.org%3AAnnotation+%28Programmierung%29&rft.title=Erstellen+benutzerdefinierter+Attribute+%28C%23+und+Visual+Basic%29&rft.description=Erstellen+benutzerdefinierter+Attribute+%28C%23+und+Visual+Basic%29&rft.identifier=https%3A%2F%2Fmsdn.microsoft.com%2Fde-de%2Flibrary%2Fsw480ze8.aspx&rft.creator=MSDN"> </span></span>
</li>
</ol></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2025-08-22" href="https://de.wikipedia.org/wiki/?title=Annotation_(Programmierung)&oldid=259091023">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>
</body></html>